package com.dayuanit.dy15.atm.service.impl;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.PutObjectRequest;
import com.dayuanit.dy15.atm.entity.AtmUser;
import com.dayuanit.dy15.atm.mapper.AtmUserMapper;
import com.dayuanit.dy15.atm.service.AtmUserService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.joda.time.DateTime;

import javax.annotation.Resource;
import java.io.InputStream;
import java.util.List;
import java.util.UUID;

/**
 * (AtmUser)表服务实现类
 *
 * @author makejava
 * @since 2020-05-23 11:48:33
 */
@Service("atmUserService")
public class AtmUserServiceImpl implements AtmUserService {
    @Resource
    private AtmUserMapper atmUserMapper;


    //阿里云oss配置
    @Value("${aliyun.oss.file.endpoint}")
    private String endpoint;
    @Value("${aliyun.oss.file.keyid}")
    private String keyId;
    @Value("${aliyun.oss.file.keysecret}")
    private String keySecret;
    @Value("${aliyun.oss.file.bucketname}")
    private String bucketName;
    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    @Override
    public AtmUser queryById(Long id) {
        return this.atmUserMapper.queryById(id);
    }

    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    @Override
    public List<AtmUser> queryAllByLimit(int offset, int limit) {
        return this.atmUserMapper.queryAllByLimit(offset, limit);
    }

    /**
     * 新增数据
     *
     * @param atmUser 实例对象
     * @return 实例对象
     */
    @Override
    public AtmUser insert(AtmUser atmUser) {
        this.atmUserMapper.insert(atmUser);
        return atmUser;
    }

    /**
     * 修改数据
     *
     * @param atmUser 实例对象
     * @return 实例对象
     */
    @Override
    public AtmUser update(AtmUser atmUser) {
        this.atmUserMapper.update(atmUser);
        return this.queryById(atmUser.getId());
    }

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Long id) {
        return this.atmUserMapper.deleteById(id) > 0;
    }

    @Override
    public String avatarUpload(MultipartFile multipartFile) {
        OSS ossClient = null;
        try {
            ////获取上传文件输入流
            InputStream inputStream = multipartFile.getInputStream();

            // 创建OSSClient实例。
            ossClient = new OSSClientBuilder().build(endpoint, keyId, keySecret);

            //拼接不相同文件名 文件名相同会被覆盖 对文件没做些处理 且按照日期分类
            //todo 层级结构可修改
            String fileName = multipartFile.getOriginalFilename();
            String uuid = UUID.randomUUID().toString().replaceAll("-", "");
            String datePath = new DateTime().toString("yyyy/MM/dd");
            //2020/04/21/uuid/1.jpg 阿里云会根据/自动创建子目录
            fileName = datePath + "/" + uuid + fileName;
            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, fileName, inputStream);

            // 上传文件。
            ossClient.putObject(putObjectRequest);

            //把上传之后文件路径返回
            //需要把上传到阿里云oss路径手动拼接出来
            //  https://edu-guli-1010.oss-cn-beijing.aliyuncs.com/01.jpg
            String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
            return url;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            // 关闭OSSClient。
            ossClient.shutdown();
        }
    }
}
